package com.zb.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zb.entity.AccounLoginInfo;
import com.zb.entity.SelectResultVo;
import com.zb.entity.SelectVo;
import com.zb.entity.ZjNetwork;
import com.zb.exception.SMSException;
import com.zb.extend.NetworkExtend;
import com.zb.mobile.NetworkMobileInfoVo;
import com.zb.vo.NetworkListVo;
import com.zb.vo.NetworkSelectSearchVo;
import com.zb.vo.NetworkSelectVo;
import com.zb.vo.NetworkVo;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 网点表 服务类
 * </p>
 *
 * @author WEN
 * @since 2023-10-18
 */
public interface ZjNetworkService extends IService<ZjNetwork> {

    /**
     * 新增或修改服务商
     * @param logintInfo
     * @param networkVo
     */
    void save(AccounLoginInfo logintInfo, NetworkVo networkVo);

    /**
     * 获取服务商列表
     * @param custAccId       商家ID
     * @param networkSelectVo 搜索条件
     * @return
     */
    List<NetworkListVo> getList(Long custAccId, NetworkSelectVo networkSelectVo);

    /**
     * 获取服务商列表总记录数
     * @param custAccId       商家ID
     * @param networkSelectVo 搜索条件
     * @return
     */
    long getListCount(Long custAccId, NetworkSelectVo networkSelectVo);

    /**
     * 获取服务商列表继承类信息
     * @param custAccId       商家ID
     * @param networkSelectVo 搜索条件
     * @return
     */
    List<NetworkExtend> getListExtend(Long custAccId, NetworkSelectVo networkSelectVo);

    /**
     * 获取服务商下拉数据
     * @param custAccId 商家ID
     * @param type 网点服务类型：0-两者都是，1-销售网点，2-售后网点
     * @param selectVo 搜索对象
     * @return
     */
    Map<String, Object> getNetworkPageSelect(Long custAccId, Integer type, SelectVo selectVo);

    /**
     * 根据服务商分类或区域查询对应的服务商
     * @param custAccId 商家ID
     * @param searchVo 搜索条件
     * @return
     */
    Map<String, Object> getNetworkSelect(Long custAccId, NetworkSelectSearchVo searchVo);

    /**
     * 根据服务商ID获取修改服务商前的信息
     * @param id
     * @return
     */
    NetworkVo getBeforeNetworkEditSelect(Long id);

    /**
     * 批量启用或禁用服务商
     * @param ids 服务商ID
     * @param status 服务商状态：false-启用，true-禁用
     */
    void updateDisableBatchById(List<Long> ids, boolean status);

    /**
     * 根据服务商ID获取服务商名称
     * @param id 服务商ID
     * @return
     */
    String getNameById(Long id);

    /**
     * 校验工程师加入服务商的邀请码
     * @param loginInfo
     * @param inviteCode
     * @return
     */
    void checkJoinNetworkInviteCode(AccounLoginInfo loginInfo, String inviteCode) throws SMSException;

    /**
     * 根据邀请码获取服务商信息
     * @param inviteCode 邀请码
     * @return
     */
    NetworkMobileInfoVo getNetworkInfoByInviteCode(AccounLoginInfo loginInfo, String inviteCode) throws SMSException;

    /**
     * 获取服务商及地址下拉数据
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> getNetworkAddressPageSelect(Long custAccId, SelectVo selectVo);

    /**
     * 根据服务商ID获取服务商名称
     * @param ids 服务商ID
     * @return
     */
    List<ZjNetwork> getNameByIds(List<Long> ids);

    /**
     * 根据服务人员ID获取对应服务商下拉数据
     * @param custAccId 商家ID
     * @param networkEmpId 服务人员ID
     * @return
     */
    List<SelectResultVo> getNetworkByNetworkEmpIdSelect(Long custAccId, Long networkEmpId);
}
